package com.tianya.common.util;

import com.opensymphony.xwork2.Action; 
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.ActionProxy;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.opensymphony.xwork2.ActionContext;
import com.tianya.common.model.User;

@SuppressWarnings("serial")
public class Authority extends AbstractInterceptor {

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		// 取得请求的Action名 
        //String name = invocation.getInvocationContext().getName(); // action的名称，在xml中配置的 
        ActionProxy ap= invocation.getProxy();
        String name = ap.getActionName();
        String packgeName = ap.getConfig().getPackageName();
        //如果是在线请求，则使之通过
        if("onlinebook".equalsIgnoreCase(packgeName)){
        	return invocation.invoke(); 
        }
        //如果是AJAX操作，则使之通过
        if("ajax".equalsIgnoreCase(packgeName)){
        	return invocation.invoke(); 
        }
    	if("default".equalsIgnoreCase(ap.getConfig().getPackageName())){
			//不需要check权限的包
    		return invocation.invoke(); 
		}
        
        //如果是外部登陆则不check，直接通过
        if (name.equalsIgnoreCase("loginUser") || name.equalsIgnoreCase("login")|| name.equalsIgnoreCase("external") || name.equalsIgnoreCase("onlinelogin")|| name.equalsIgnoreCase("safecode")) { 
            // 登录操作，则使之通过 
            return invocation.invoke(); 
        } 
		ActionContext ctx = invocation.getInvocationContext(); 
        User user = (User) ctx.getSession().get(SessionConst.User); 
        if (user == null) { 
        	 ctx.put("tip", "E0001"); 
             return Action.LOGIN; 
        } 
  
        //用户已经登录，具有权限，正常执行
        try
        {
        	return invocation.invoke();
        }catch(Exception e){
        	return Action.LOGIN; 
        }
	}

}
